package com.ssy.lingxi.member.merchant.service.feign;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.entity.MemberRelationDO;
import com.ssy.lingxi.member.merchant.model.bo.AuthBO;
import com.ssy.lingxi.member.merchant.model.bo.WorkflowTaskListBO;
import com.ssy.lingxi.member.merchant.model.bo.WorkflowTaskResultBO;

import java.util.List;

/**
 * 调用工作流服务Feign接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-09-14
 */
public interface IWorkflowFeignService {

    /**
     * 启动会员流程
     * @param relationDO 会员关系
     * @return 启动结果
     */
    Wrapper<WorkflowTaskResultBO> startMemberProcess(MemberRelationDO relationDO);

    /**
     * 启动会员流程
     * @param processKey 流程的Key
     * @param memberId 执行流程的会员Id
     * @param roleId   执行流程的会员角色Id
     * @param dataId   审核数据Id
     * @return 启动结果
     */
    Wrapper<WorkflowTaskResultBO> startMemberProcess(String processKey, Long memberId, Long roleId, Long dataId);

    /**
     * 执行会员流程
     * @param relationDO 会员关系
     * @param agree 审核意见
     * @return 执行结果
     */
    Wrapper<WorkflowTaskResultBO> execMemberProcess(MemberRelationDO relationDO, Integer agree);

    /**
     * 执行会员流程
     * @param processKey 流程的Key
     * @param taskId 流程任务Id
     * @param memberId 执行流程的会员Id
     * @param roleId   执行流程的会员角色Id
     * @param dataId   审核数据Id
     * @param agree 审核结果
     * @return 启动结果
     */
    Wrapper<WorkflowTaskResultBO> execMemberProcess(String processKey, String taskId, Long memberId, Long roleId, Long dataId, Integer agree);

    /**
     * 查询会员流程步骤
     * @param relationDO 会员关系
     * @return 查询结果
     */
    Wrapper<WorkflowTaskListBO> listMemberProcessSteps(MemberRelationDO relationDO);

    /**
     * 查询会员流程步骤
     * @param memberId 执行流程的会员Id
     * @param processKey 流程的ProcessKey
     * @param taskId 将要执行的工作流任务id
     * @return 查询结果
     */
    Wrapper<WorkflowTaskListBO> listMemberProcessSteps(Long memberId, String processKey, String taskId);

    /**
     * 查询外部流程步骤
     * @param roleId 上级角色id
     * @param subRoleId 下级角色id
     * @param processKey 流程的ProcessKey
     * @param taskId 将要执行的工作流任务id
     * @return 查询结果
     */
    Wrapper<WorkflowTaskListBO> listExternalProcessSteps(Long roleId, Long subRoleId, String processKey, String taskId);

    /**
     * 新增或修改会员角色时，关联工作流步骤
     * @param memberId 会员Id
     * @param memberRoleId 会员自定义角色Id
     * @param memberRoleName 会员自定义角色名称
     * @param authBOList 会员自定义角色权限列表
     */
    void upsertMemberRoleToProcessAsync(Long memberId, Long memberRoleId, String memberRoleName, List<AuthBO> authBOList);

    /**
     * 删除会员角色时，从关联的工作流步骤中移除会员角色
     * @param memberId 会员Id
     * @param memberRoleId 会员自定义角色Id
     */
    void removeMemberRoleInProcessAsync(Long memberId, Long memberRoleId);
}
